package com.brillilab.domain.vo.topics;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import org.springframework.util.CollectionUtils;

import com.brillilab.domain.po.experiments.ExperimentRelation;
import com.brillilab.domain.po.system.FileManage;

import lombok.Data;

@Data
public class TopicExperimentVo  implements Serializable {

	private static final long serialVersionUID = 1L;

	/**
	 * id
	 */
	private Long topicExperimentId;

	/**
	 * 课题id
	 */
	private Long topicId;
	/**
	 * 课题状态：0未开始、1进行中、2历史课题
	 */
	private int topicState;

	/**
	 * 研究内容id
	 */
	private Long topicDirectionId;

	/**
	 * 实验流id
	 */
	private Long topicTargetId;
	
	/**
	 * 颜色
	 */
	private String color;
	
	/**
	 * 主执行人（labmemberid）
	 */
	private Long mainExecutorId;
	
	/**
	 * 执行人（labmemberid）
	 */
	private Long executorId;

	/**
	 * 一级方法类型
	 */
	private Long firstTypeId;

	/**
	 * 方法类型
	 */
	private Long methodTypeId;

	/**
	 * 方法类型名称
	 */
	private String methodTypeName;

	/**
	 * 序号
	 */
	private String serial;

	/**
	 * 是否是检测实验：0-否，1-是
	 */
	private Integer isCheck;

	/**
	 * 是否有发表级结果：0-否，1-是
	 */
	private Integer isPublish;

	/**
	 * 是否删除：0正常、1删除、2作废
	 */
	private Integer isDelete;
	
	/**
	 * 实验状态：0:未开始,1进行中、2已结束
	 */
	private int state;
	
	/**
	 * 是否符合实验预期：0不符合、1符合
	 */
	private Integer isExpect;
	
	/**
	 * 执行人姓名
	 */
	private String userName;

	/**
	 * 执行人头像
	 */
	private String imageUrl;
	
	/**
	 * 实验时间列表
	 */
	private List<ExperimentDateListVo> experimentList;
	
	/**
	 * 操作类型：1删除，2作废，3恢复
	 */
	private Integer operateType;
	/**
	 * 是否操作分配执行人权限：0-否，1-是
	 */
	private int isEditPower;
	
	/**
	 * 当前实验id
	 */
	private Long experimentId;
	/**
	 * 当前实验开始时间
	 */
	private Date startTime;
	
	/**
	 * 实验目标最新一次实验id
	 */
	private Long latestExperimentId;
	
	/**
	 * 实验开始类型：0:开始,1继续、2重复实验，null不显示
	 */
	private Integer startType;
	
	/**
	 * 实验评论数
	 */
	private int commentNum;

	/**
	 * 实验样品关联列表
	 */
	private List<ExperimentRelation> relationList;
	
	/**
	 * Icon列表
	 */
	private List<ExperimentIconVo> iconList;
	
	/**
	 * 产出列表
	 */
	private List<ProduceVo> produceList;
	
	/**
	 * 分析后文件
	 */
	private FileManage compressAnalysisFile;
	
	/**
	 * 是否有原始数据：0否，1是
	 */
	private int isPrimaryData;
	
	/**
	 * 实验流组id
	 */
	private Long targetGroupId;
	
	/**
	 * 实验流组状态：1进行中、2已结束
	 */
	private Integer targetGroupState;
	
	/**
	 * 实验目标组id
	 */
	private Long experimentGroupId;
	
	/**
	 * 计划id
	 */
	private Long planId;

	public Integer getStartType() {
		if(!experimentId.equals(latestExperimentId)) {
			return null;
		}
		return startType;
	}
	
	/**
	 * 是否添加分组：0否，1是，2导师已查看
	 */
	private int isAddGroup;

	/**
	 * 是否添加分析后数据：0否，1是，2导师已查看
	 */
	private int isAddAnalyze;

	/**
	 * 是否添加trouble：0否，1是，2导师已查看
	 */
	private int isAddTrouble;

	/**
	 * 是否可操作计划：0否，1是
	 */
	private int isOperatePlan;
	
	/**
	 * 是否可移除出计划组：0否，1是
	 */
	private int isRemove;
	
	public int getIsRemove() {
		if(isOperatePlan==1 && targetGroupState!=null && targetGroupState==1 && experimentGroupId!=null) {
			if(CollectionUtils.isEmpty(experimentList)) {
				return 1;
			}else if(experimentList.size()==1 && state==0){
				return 1;
			}
		}
		return isRemove;
	}
	
}
